package ctrFinanceiro.gui;

import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.StringTokenizer;

import javax.swing.JButton;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;

import ctrFinanceiro.bd.UsuarioBD;

public class UsuarioGUI extends JInternalFrame implements MouseListener {

	private static final long serialVersionUID = 1L;

	private UsuarioBD bd;
	private JPanel jContentPane = null;

	private JLabel jLabelIdUsuario = null;
	private JTextField jTextFieldIdUsuario = null;
	
	private JLabel jLabelNomeUsuario = null;
	private JTextField jTextFieldNomeUsuario = null;
	
	private JLabel jLabelLogin = null;
	private JTextField jTextFieldLogin = null;

	private JLabel jLabelSenha = null;
	private JPasswordField jTextFieldSenha = null;
	
	private JScrollPane jScrollPaneUsuarios = null;
	private JList jListUsuarios = null;
	private JButton jButtonIncluir = null;
	private JButton jButtonAlterar = null;
	private JButton jButtonExcluir = null;
	private JButton jButtonCancelar = null;

	public UsuarioGUI() {
		
		super("Cadastro de Usu\u00E1rios",
		        false, //resizable
		        true, //closable
		       false, //maximizable
		        true);//iconifiable  

		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.bd = new UsuarioBD();
		this.setSize(747, 354);
		getContentPane().add(getJContentPane());
		
		
		this.updateList();
		this.setVisible(true);
	}

	private JLabel getJLabelLogin() {
		if (jLabelLogin == null) {
			jLabelLogin = new JLabel();
			jLabelLogin.setBounds(10, 211, 38, 16);
			jLabelLogin.setText("Login:");
		}
		return jLabelLogin;
	}

	private JLabel getJLabelNomeUsuario() {
		if (jLabelNomeUsuario == null) {
			jLabelNomeUsuario = new JLabel();
			jLabelNomeUsuario.setBounds(94, 163, 48, 16);
			jLabelNomeUsuario.setText("Usu\u00E1rio");
		}
		return jLabelNomeUsuario;
	}

	private JLabel getJLabelIdUsuario() {
		if (jLabelIdUsuario == null) {
			jLabelIdUsuario = new JLabel();
			jLabelIdUsuario.setBounds(10, 163, 26, 16);
			jLabelIdUsuario.setText("Id:");
		}
		return jLabelIdUsuario;
	}

	private JLabel getJLabelSenha() {
		if (jLabelSenha == null) {
			jLabelSenha = new JLabel();
			jLabelSenha.setBounds(230, 211, 48, 16);
			jLabelSenha.setText("Senha:");
		}
		return jLabelSenha;
	}
	
	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJButtonIncluir(), null);
			jContentPane.add(getJButtonAlterar(), null);
			jContentPane.add(getJButtonExcluir(), null);
			jContentPane.add(getJButtonCancelar(), null);
			
			JPanel panel = new JPanel();
			panel.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null));
			panel.setBounds(29, 11, 668, 259);
			jContentPane.add(panel);
			panel.setLayout(null);
			panel.add(getJScrollPaneUsuarios());
			panel.add(getJLabelLogin());
			panel.add(getJLabelSenha());
			panel.add(getJTextFieldLogin());
			panel.add(getJTextFieldSenha());
			panel.add(getJLabelIdUsuario());
			panel.add(getJTextFieldIdUsuario());
			panel.add(getJLabelNomeUsuario());
			panel.add(getJTextFieldNomeUsuario());
		}
		return jContentPane;
	}

	/**
	 * This method initializes jTextFieldIdUsuario
	 * 
	 * @return javax.swing.JTextField
	 */
	private JTextField getJTextFieldIdUsuario() {
		if (jTextFieldIdUsuario == null) {
			jTextFieldIdUsuario = new JTextField();
			jTextFieldIdUsuario.setBounds(10, 180, 62, 20);
			jTextFieldIdUsuario.setEditable(false);
		}
		return jTextFieldIdUsuario;
	}

	/**
	 * This method initializes jTextFieldNomeUsuario
	 * 
	 * @return javax.swing.JTextField
	 */
	private JTextField getJTextFieldNomeUsuario() {
		if (jTextFieldNomeUsuario == null) {
			jTextFieldNomeUsuario = new JTextField();
			jTextFieldNomeUsuario.setBounds(96, 180, 562, 20);
		}
		return jTextFieldNomeUsuario;
	}

	/**
	 * This method initializes jTextFieldSenha
	 * 
	 * @return javax.swing.JTextField
	 */
	private JPasswordField getJTextFieldSenha() {
		if (jTextFieldSenha == null) {
			jTextFieldSenha = new JPasswordField();
			jTextFieldSenha.setBounds(230, 228, 200, 20);
			jTextFieldSenha.setColumns(6);
		}
		return jTextFieldSenha;
	}

	private JTextField getJTextFieldLogin() {
		if (jTextFieldLogin == null) {
			jTextFieldLogin = new JTextField();
			jTextFieldLogin.setBounds(10, 228, 200, 20);
			jTextFieldLogin.setColumns(10);
		}
		return jTextFieldLogin;
	}
	
	/**
	 * This method initializes jScrollPaneUsuario
	 * 
	 * @return javax.swing.JScrollPane
	 */
	private JScrollPane getJScrollPaneUsuarios() {
		if (jScrollPaneUsuarios == null) {
			jScrollPaneUsuarios = new JScrollPane();
			jScrollPaneUsuarios.setBounds(10, 11, 648, 139);
			jScrollPaneUsuarios.setViewportView(getJListUsuarios());
		}
		return jScrollPaneUsuarios;
	}

	/**
	 * This method initializes jListUsuario
	 * 
	 * @return javax.swing.JList
	 */
	private JList getJListUsuarios() {
		if (jListUsuarios == null) {
			jListUsuarios = new JList();
			jListUsuarios.addMouseListener(this);
		}
		return jListUsuarios;
	}

	/**
	 * This method initializes jButtonIncluir
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getJButtonIncluir() {
		if (jButtonIncluir == null) {
			jButtonIncluir = new JButton();
			jButtonIncluir.setBounds(new Rectangle(64, 281, 102, 24));
			jButtonIncluir.setText("Incluir");
			jButtonIncluir.addMouseListener(this);
		}
		return jButtonIncluir;
	}

	/**
	 * This method initializes jButtonAlterar
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getJButtonAlterar() {
		if (jButtonAlterar == null) {
			jButtonAlterar = new JButton();
			jButtonAlterar.setBounds(new Rectangle(230, 281, 102, 24));
			jButtonAlterar.setText("Alterar");
			jButtonAlterar.addMouseListener(this);
		}
		return jButtonAlterar;
	}

	/**
	 * This method initializes jButtonExcluir
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getJButtonExcluir() {
		if (jButtonExcluir == null) {
			jButtonExcluir = new JButton();
			jButtonExcluir.setBounds(new Rectangle(396, 281, 102, 24));
			jButtonExcluir.setText("Excluir");
			jButtonExcluir.addMouseListener(this);
		}
		return jButtonExcluir;
	}

	/**
	 * This method initializes jButtonLimpar
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getJButtonCancelar() {
		if (jButtonCancelar == null) {
			jButtonCancelar = new JButton();
			jButtonCancelar.setBounds(new Rectangle(562, 281, 102, 24));
			jButtonCancelar.setText("Cancelar");
			jButtonCancelar.addMouseListener(this);
		}
		return jButtonCancelar;
	}

	public void mouseClicked(MouseEvent e) {
		if (e.getSource() == this.getJButtonIncluir()) {
			handlerUsuario("INCLUIR");
		} else if (e.getSource() == this.getJButtonAlterar()) {
			handlerUsuario("ALTERAR");
		} else if (e.getSource() == this.getJButtonExcluir()) {
			handlerUsuario("EXCLUIR");
		} else if (e.getSource() == this.getJListUsuarios()) {
			handlerUsuario("SELECIONAR");
		}

		else if (e.getSource() == this.getJButtonCancelar()) {
			clearAllFields();
		}

		else {
			clearFields();
		}
	}

	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	private void handlerUsuario(String action) {
		String idUsuario = this.getJTextFieldIdUsuario().getText();
		String nomeUsuario = this.getJTextFieldNomeUsuario().getText();
		String login = this.getJTextFieldLogin().getText();
		String senha = this.getJTextFieldSenha().getText();

		if (action.equals("INCLUIR")) {
			bd.addUsuario(idUsuario, nomeUsuario, login, senha);
			clearFields();
		} else if (action.equals("ALTERAR")) {
			bd.updateUsuario(idUsuario, nomeUsuario, login, senha);
			clearFields();
		} else if (action.equals("EXCLUIR")) {
			bd.excludeUsuario(idUsuario);
			clearFields();
		}

		else if (action.equals("CANCELAR"))
			clearAllFields();
		else {
			String infoList = (String) this.getJListUsuarios().getSelectedValue();
			String delimitor = "-";
			StringTokenizer tokens = new StringTokenizer(infoList, delimitor);
			String infos[] = new String[tokens.countTokens() + 1];
			int i = 0;
			while (tokens.hasMoreTokens()) {
				infos[i] = tokens.nextToken();
				i++;
			}
			idUsuario = infos[0].trim();
			nomeUsuario = infos[1].trim();
			login = infos[2].trim();
			senha = infos[3].trim();
			jTextFieldIdUsuario.setText(idUsuario);
			jTextFieldNomeUsuario.setText(nomeUsuario);
			jTextFieldLogin.setText(login);
			jTextFieldSenha.setText(senha);
		}
		updateList();

	}

	private void updateList() {
		String[] info = bd.getInfoUsuarios();
		this.getJListUsuarios().setListData(info);
	}

	private void clearAllFields() {
		jTextFieldIdUsuario.setText("");
		jTextFieldNomeUsuario.setText("");
		jTextFieldLogin.setText("");
		jTextFieldSenha.setText("");
		jListUsuarios.setListData(new String[0]);
	}

	private void clearFields() {
		getJTextFieldIdUsuario().setText("");
		getJTextFieldNomeUsuario().setText("");
		getJTextFieldLogin().setText("");
		getJTextFieldSenha().setText("");
	}
}
